package com.mycode.simplefactory02;

import com.mycode.simplefactory02.resolve.Chart;
import com.mycode.simplefactory02.resolve.ChartFactory;

/**
 * 工厂模式：使对象的创建和对象的使用分离
 * 主要优点：
 *   1、工厂类包含必要的判断逻辑，可以决定在什么时候创建哪个产品实例，客户类仅仅是 消费 产品
 *   2、客户端无需知道所创建的具体产品类的类名，只需要知道具体产品类对应的参数即可
 *   3、可以通过引入配置文件提交系统灵活性
 * 主要缺点：
 *   1、工厂类承担所有产品创建、职责过重
 *   2、简单工厂模式会增加系统类的个数，增加系统的复杂度和理解难度
 *   3、系统扩展困难，一旦添加新产品就不得不修改工厂逻辑，在产品较多时，可能会造成工厂逻辑过于复杂，不利于系统的扩展和维护
 *   4、简单工厂模式使用静态工厂方法，造成工厂角色无法形成基于继承的等级结构
 * 适用场景：
 *   1、工厂类负责创建的对象较少
 *   2、客户端只知道传入工厂类的参数，对于如何创建对象并不关心
 */
public class BootStrap {

    public static void main(String[] args) {
        // 工厂模板
        // Product product = Factory.getProduct("A");
        // product.methodSame();
        // product.methodDiff();
        Chart chart = ChartFactory.getChart("histogram");
        chart.display();
    }
}
